GTK_TYPE_ACCESSIBLE_ROLE,
GTK_ACCESSIBLE_ROLE_NONE,
G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_interface_install_property (iface, pspec);
gtk_widget_set_layout_manager (widget, g_value_dup_object (value));
break;
case PROP_ACCESSIBLE_ROLE:
- priv->accessible_role = g_value_get_enum (value);
+ if (priv->at_context == NULL)
+ {
+ priv->accessible_role = g_value_get_enum (value);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ else
+ {
+ char *role_str = g_enum_to_string (GTK_TYPE_ACCESSIBLE_ROLE, priv->accessible_role);
+ g_critical ("Widget of type ā%sā already has an accessible role of type ā%sā",
+ G_OBJECT_TYPE_NAME (object),
+ role_str);
+ g_free (role_str);
+ }
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
else
role = class_priv->accessible_role;
- priv->at_context = gtk_at_context_create (role, accessible);
priv->accessible_role = role;
+ priv->at_context = gtk_at_context_create (role, accessible);
}
return priv->at_context;
if ((pspec->flags & G_PARAM_READABLE) == 0)
continue;
+ /* This is set via class_init, and we have a11y tests to verify it */
+ if (g_type_is_a (type, GTK_TYPE_ACCESSIBLE) &&
+ strcmp (pspec->name, "accessible-role") == 0)
+ continue;
+
/* This is set via construct property */
if (g_type_is_a (type, GTK_TYPE_BUILDER) &&
strcmp (pspec->name, "scope") == 0)
continue;
if (g_type_is_a (type, GTK_TYPE_WIDGET) &&
- (strcmp (pspec->name, "name") == 0 ||
+ (strcmp (pspec->name, "name") == 0 ||
strcmp (pspec->name, "display") == 0 ||
strcmp (pspec->name, "style") == 0))
continue;
g_str_equal (pspec->name, "vexpand")))
continue;
+ if (g_type_is_a (type, GTK_TYPE_ACCESSIBLE) &&
+ g_str_equal (pspec->name, "accessible-role"))
+ continue;
+
if (pspec->owner_type == GTK_TYPE_ENTRY &&
g_str_equal (pspec->name, "im-module"))
continue;